Skip to content

Conversation

@donald
Copy link
Collaborator

@donald Donald Buczek (donald) commented Oct 11, 2026 •

Change the default network queueing discipline from pfifo_fast to fq but use fq_codel on interfaces on routers.

Addresses mariux64/mariux64-issues#234

@pmenzel
Copy link
Contributor

Typo in merge request description: Addresses:

# fq paces locally generated TCP traffic at the rate the TCP stack
# computed for the socket. Data then leaves in an even stream instead of
# line-rate bursts, which are likely to overflow the small buffers of
# access points and switch ports in front of slow links (for example a
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

“likely to overflow the small buffers of access points” contradicts our UDP measurements, where bursts of about 600 kB passed without loss. claude-opus-5.5 suggests: “which some access points (seen with Cisco) handle badly”

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm sure, UDP bursts will also overrun the buffers sooner or later and we can't help it. However with tcp we can because tcp can pace the transmit data (even CUBIC) but this is not honored by pfifo_fast. I don't agree that Cisco devices handle this badly. It does make sense to bundle packets to save air time and this is not a bug per se although overruns by badly throttled senders are more likely to happen in that case.

In any case, fq seems to be the better choice.

fq paces locally generated TCP traffic at the rate the TCP stack
computed for the socket. Data then leaves in an even stream instead of
line-rate bursts, which are likely to overflow the small buffers of
access points and switch ports in front of slow links (for example a
laptop on wifi).

fq also keeps a separate queue per flow and serves them in turn. When
the local link is saturated, a single bulk transfer can no longer delay
all other flows on the interface, as it can with the shared FIFO of
pfifo_fast.

Note: fq is meant for hosts that terminate TCP connections. On a router,
fq_codel may be the better choice: forwarded packets have no local
socket, so fq cannot pace them, while the CoDel part of fq_codel actively
keeps queueing delay low.
Set fq_codel on the physical interfaces of the router when they are
brought up, instead of relying on the global default qdisc, which suits
hosts better than routers. On multiqueue devices, keep mq as root and
attach fq_codel to each tx queue.
@donald
Copy link
Collaborator Author

Just rebased...

@donald Donald Buczek (donald) merged commit 4e55964 into master Oct 14, 2026
Sign in to join this conversation on GitHub.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants